/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * dlgModificarUsuario.java
 *
 * Created on Oct 18, 2011, 11:07:11 PM
 */

package visual.Seguridad;

import bentity.bePerfil;
import bentity.beUsuario;
import blogic.blLog;
import blogic.blPerfil;
import blogic.blUsuario;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.text.*;

/**
 *
 * @author renzo
 */
public class dlgModificarUsuario extends javax.swing.JDialog {
    private beUsuario usuario = null;
    private beUsuario usuarioModificar = null;
    /** Creates new form dlgModificarUsuario */
    public dlgModificarUsuario(pnfMantenimientoUsuario parent, boolean modal, beUsuario usuario, int codUsuario) {
        super((java.awt.Frame)null, modal);
        initComponents();
        this.usuario = usuario;
        this.txtNombre.setDocument(new JTextFieldLimit(15));
        this.txtCargo.setDocument(new JTextFieldLimit(25));
        this.setModal(true);
        visualHelper.centrarDialogoEnPantalla(this);

        int fila = parent.getTblUsuario().getSelectedRow();
        String dato = "";
        try{
            blUsuario gestorUsuarios = new blUsuario();
            this.usuarioModificar = gestorUsuarios.queryById(codUsuario);
        } catch (Exception e) {
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Usuario no encontrado.");
        }


        try{
            //Llenar combo de PErfil
            blPerfil gestorPerfiles = new blPerfil();
            ArrayList<bePerfil> listaPerfiles = new ArrayList<bePerfil>();
            listaPerfiles = gestorPerfiles.queryAll();

            this.cboPerfil.addItem("");
            for (int i=0; i<listaPerfiles.size(); i++){
                cboPerfil.addItem(listaPerfiles.get(i).getDescripcion());
            }

            //Llenar el combo Estado
            this.cboEstado.addItem("Activo");
            this.cboEstado.addItem("Bloqueado");
            if (this.usuarioModificar.getEstado()==beUsuario.U_ACTIVO)
                this.cboEstado.setSelectedIndex(0);
            else
                this.cboEstado.setSelectedIndex(1);

        }
        catch (Exception e){
            e.printStackTrace();
            System.out.print(e.getMessage());
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda de Perfil");
        }


        for(int i=0; i<parent.getTblUsuario().getColumnCount(); i++){
            dato = String.valueOf(parent.getTblUsuario().getValueAt(fila, i));
            switch (i){
                case 0:
                    this.txtCodigo.setText(dato);
                    break;
                case 1:
                    this.txtCargo.setText(dato);
                    break;
                case 2:
                    this.txtNombre.setText(dato);
                    break;
                case 3:
                    this.cboPerfil.setSelectedItem(dato);
                    break;                
            }
        }

        this.setBounds(0, 0, 500, 500);
        this.setResizable(false);
        visualHelper.centrarDialogoEnPantalla(this);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnModificar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        lblCargo = new javax.swing.JLabel();
        txtCargo = new javax.swing.JTextField();
        lblNombre = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        cboEstado = new javax.swing.JComboBox();
        lblEstado = new javax.swing.JLabel();
        lblTitulo = new javax.swing.JLabel();
        txtCodigo = new javax.swing.JTextField();
        lblCodigo = new javax.swing.JLabel();
        lblPerfil1 = new javax.swing.JLabel();
        cboPerfil = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setMinimumSize(new java.awt.Dimension(500, 320));
        getContentPane().setLayout(null);

        btnModificar.setBackground(new java.awt.Color(240, 235, 226));
        btnModificar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnModificar.setForeground(new java.awt.Color(0, 0, 0));
        btnModificar.setText("Modificar");
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        getContentPane().add(btnModificar);
        btnModificar.setBounds(80, 300, 110, 27);

        btnCancelar.setBackground(new java.awt.Color(240, 235, 226));
        btnCancelar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnCancelar.setForeground(new java.awt.Color(0, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        getContentPane().add(btnCancelar);
        btnCancelar.setBounds(240, 300, 110, 27);

        lblCargo.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCargo.setForeground(new java.awt.Color(0, 0, 0));
        lblCargo.setText("Cargo");
        getContentPane().add(lblCargo);
        lblCargo.setBounds(30, 160, 50, 15);

        txtCargo.setFont(new java.awt.Font("Dialog", 0, 12));
        getContentPane().add(txtCargo);
        txtCargo.setBounds(120, 160, 320, 25);

        lblNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        lblNombre.setForeground(new java.awt.Color(0, 0, 0));
        lblNombre.setText("Nombre");
        getContentPane().add(lblNombre);
        lblNombre.setBounds(30, 120, 50, 15);

        txtNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        getContentPane().add(txtNombre);
        txtNombre.setBounds(120, 120, 320, 25);

        cboEstado.setFont(new java.awt.Font("Dialog", 0, 12));
        getContentPane().add(cboEstado);
        cboEstado.setBounds(120, 240, 320, 25);

        lblEstado.setFont(new java.awt.Font("Dialog", 0, 12));
        lblEstado.setForeground(new java.awt.Color(0, 0, 0));
        lblEstado.setText("Estado");
        getContentPane().add(lblEstado);
        lblEstado.setBounds(30, 240, 60, 15);

        lblTitulo.setFont(new java.awt.Font("Dialog", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Modificar usuario");
        getContentPane().add(lblTitulo);
        lblTitulo.setBounds(70, 20, 320, 43);

        txtCodigo.setFont(new java.awt.Font("Dialog", 0, 12));
        txtCodigo.setEnabled(false);
        getContentPane().add(txtCodigo);
        txtCodigo.setBounds(120, 80, 320, 25);

        lblCodigo.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCodigo.setForeground(new java.awt.Color(0, 0, 0));
        lblCodigo.setText("Código");
        getContentPane().add(lblCodigo);
        lblCodigo.setBounds(30, 80, 50, 15);

        lblPerfil1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblPerfil1.setForeground(new java.awt.Color(0, 0, 0));
        lblPerfil1.setText("Perfil");
        getContentPane().add(lblPerfil1);
        lblPerfil1.setBounds(30, 200, 31, 15);

        cboPerfil.setFont(new java.awt.Font("Dialog", 0, 12));
        getContentPane().add(cboPerfil);
        cboPerfil.setBounds(120, 200, 320, 25);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        String strNombre = "";
        String strCargo = "";
        String strPerfil = "";
        int estadoUsuario = 0;
        blPerfil gestorPerfiles = new blPerfil();
        blUsuario gestorUsuarios = new blUsuario();
        bePerfil perfil = new bePerfil();
        beUsuario usuarioModificar = new beUsuario();
        ArrayList<beUsuario> listaUsuarios = new ArrayList<beUsuario>();

        try{
            //Se valida los campos nombre y cargo
            if (this.txtNombre.getText().equals("")){
                visualHelper.mostrarMensajeError("Debe de llenar el campo Nombre.");
                return;
            }

            if (!(this.usuarioModificar.getNombre().equals(this.txtNombre.getText()))){
                listaUsuarios = gestorUsuarios.queryAll();
                    for (int i=0; i<listaUsuarios.size();i++)
                        if (listaUsuarios.get(i).getNombre().equals(this.txtNombre.getText())){
                            visualHelper.mostrarMensajeError("El usuario ingresado ya existe.");
                            return;
                        }
            }


            if (this.txtCargo.getText().equals("")){
                visualHelper.mostrarMensajeError("Debe de llenar el campo Cargo.");
                return;
            }

            if (this.cboPerfil.getSelectedIndex()==0){
                visualHelper.mostrarMensajeError("Debe seleccionar un perfil.");
                return;
            }
            
            int codUsuario = Integer.parseInt(this.txtCodigo.getText());
            usuarioModificar = gestorUsuarios.queryById(codUsuario);

            strNombre = this.txtNombre.getText();
            strCargo = this.txtCargo.getText();
            strPerfil = this.cboPerfil.getSelectedItem().toString();

            perfil = gestorPerfiles.queryByNombre(cboPerfil.getSelectedItem().toString());

            if (this.cboEstado.getSelectedItem().toString().equals("Activo"))
                estadoUsuario = beUsuario.U_ACTIVO;
            else
                estadoUsuario = beUsuario.U_BLOQUEADO;


            beUsuario usuario = new beUsuario(codUsuario, strCargo, strNombre, usuarioModificar.getContrasenha(), estadoUsuario, perfil.getId(),usuarioModificar.getIngreso());
            
            gestorUsuarios.modificar(usuario);
            visualHelper.mostrarMensajeSatisfaccion("Se modificó satisfactoriamente el cliente");
            (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Se modificó el usuario: "+usuario.getIdUsuario()+" - "+usuario.getNombre());
            this.dispose();
        }
        catch (Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("No se pudo registrar el cliente.");
        }
}//GEN-LAST:event_btnModificarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        JOptionPane.showMessageDialog(this, "No se guardaron los cambios.", "Información", JOptionPane.INFORMATION_MESSAGE);
        this.dispose();
}//GEN-LAST:event_btnCancelarActionPerformed

    public class JTextFieldLimit extends PlainDocument {
          private int limit;
          // optional uppercase conversion
          private boolean toUppercase = false;

          JTextFieldLimit(int limit) {
           super();
           this.limit = limit;
           }

          JTextFieldLimit(int limit, boolean upper) {
           super();
           this.limit = limit;
           toUppercase = upper;
           }

          public void insertString
            (int offset, String  str, AttributeSet attr)
              throws BadLocationException {
           if (str == null) return;

           if ((getLength() + str.length()) <= limit) {
             if (toUppercase) str = str.toUpperCase();
             super.insertString(offset, str, attr);
             }
           }
    }


    /**
    * @param args the command line arguments
    */
    

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JComboBox cboEstado;
    private javax.swing.JComboBox cboPerfil;
    private javax.swing.JLabel lblCargo;
    private javax.swing.JLabel lblCodigo;
    private javax.swing.JLabel lblEstado;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblPerfil1;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTextField txtCargo;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

}
